package com.zs.usc.token.local;

import com.zs.usc.vo.CurrentUserInfo;

import java.util.Timer;
import java.util.TimerTask;

/**
 * 令牌管理抽象
 *
 * @author ZS
 */
public abstract class TokenManager {

    // 令牌有效期，单位为秒，默认30分钟
    protected int tokenTimeout = 1800;

    private final Timer timer = new Timer(true);

    // 每分钟执行一次
    public TokenManager() {
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                verifyExpired();
            }
        }, 60 * 1000, 60 * 1000);
    }

    /**
     * token超时秒数
     *
     * @param tokenTimeout
     */
    public void setTokenTimeout(int tokenTimeout) {
        this.tokenTimeout = tokenTimeout;
    }


    /**
     * 用户授权成功后将授权信息存入
     *
     * @param token
     * @param loginUser
     */
    public abstract void addToken(String token, CurrentUserInfo loginUser);

    /**
     * 移除令牌
     *
     * @param token
     */
    public abstract void remove(String token);

    /**
     * 验证令牌有效性,有效则延长session生命周期
     *
     * @param token
     * @return
     */
    public abstract CurrentUserInfo validate(String token);

    /**
     * 验证失效token
     */
    public abstract void verifyExpired();


}
